﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

class MyPrintFunc
{
public:
	void operator()(int num)
	{
		cout << "num= " << num << endl;//11 --> 13
		count++;
	}
	int count = 0;
};
void myPrintFunction(int num)
{
	cout << "num= " << num << endl;//12
};
//4.函数对象作为参数；
void doPrintFunc(MyPrintFunc print, int num)
{
	print(num);
}
void testFuncObj()
{
	//1.MyPrintFunc是一个类，不是函数，是仿函数；
	MyPrintFunc myPrintFunc;
	myPrintFunc(11);//11

	//2.匿名函数调用；
	MyPrintFunc()(13);//13

	myPrintFunction(12);//12

	//3.函数对象超出普通函数概念，内部可以保存状态；
	MyPrintFunc myPrintCount;
	myPrintCount(14);//14
	myPrintCount(14);//14
	myPrintCount(14);//14
	myPrintCount(14);//14

	cout << "myPrintCount的使用次数：" << myPrintCount.count << endl;//4

	doPrintFunc(MyPrintFunc(), 20);//num= 20
}

//main330：函数对象基本用法
int main330()
{
	testFuncObj();

	system("pause");
	return EXIT_SUCCESS;
}